// const PrerenderSPAPlugin = require('prerender-spa-plugin');
// const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
const path = require('path');

const webpack = require('webpack')
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const productionGzipExtensions = ['js', 'css']
module.exports = {
    outputDir: process.env.outputDir,
    assetsDir: 'static',
    parallel: false,
    // publicPath: './',
    publicPath: '/',// history模式下需要改成绝对路径
    lintOnSave: false,
    // configureWebpack: {
    //     devtool: 'source-map'
    // },
    productionSourceMap: false,
    // css: {
    //     loaderOptions: {
    //         postcss: {
    //             plugins: [
    //                 // 把px单位换算成rem单位
    //                 require("postcss-pxtorem")({
    //                     // rootValue: 75, // 换算的基数 (为了便于开发，根据设计图来定这个值，如果设计图给的宽度是750，通常就会把remUnit设置为75，这样就可以按照UI图1:1进行开发)
    //                     // selectorBlackList: [".van"],// 要忽略的选择器并保留为px。
    //                     // propList: ["*"], //可以从px更改为rem的属性。
    //                     // minPixelValue: 2 // 设置要替换的最小像素值。
    //                     rootValue({ file }) {
    //                         return file.indexOf('vant') !== -1 ? 37.5 : 75;
    //                     },
    //                     propList: ['*'],
    //                 })
    //             ]
    //         }
    //     }
    // },
    devServer: {
        host: '0.0.0.0',
        port: 8081,
        proxy: {
            '/api': {
                target: process.env.VUE_APP_BASE_API,
                // target: 'http://192.168.1.61:8080', // 国产化
                // target: 'http://192.168.1.198:8080', // 开发环境
                // target: 'https://overall.qcdoc.cn/',

                // target: 'https://api.qcdoc.cn', // 正式环境

                // target: 'http://47.99.126.142:8080', // 测试
                
                // target: 'http://192.168.1.43:8080', // 陈步全

                // target: 'http://192.168.1.43/vmock/api',

                // target: 'http://localhost',// 监控网络 用 ？

                // target: 'http://192.168.1.166:8080', // 开发环境 - wy

                // target: 'http://192.168.1.198:8080', // 开发环境 - 198

                // target: 'http://192.168.1.227:8080', // zhu

                // target: 'http://192.168.7.102:8080', // 苏州恒泰 7樓

                // target: 'http://192.168.8.102:8080', // 苏州恒泰 8樓  192.168.1.202



                changeOrigin: true,
                pathRewrite: {
                    '/api': ''
                }
            },
            '/customer-aim': {
                // target: 'https://overall.qcdoc.cn/',
                // target: 'http://demo.qcdoc.cn/customer-aim',
                // target: 'http://192.168.1.198:8080/customer-aim',
                // target: 'http://192.168.1.82/customer-aim',
                // target: 'http://192.168.1.16:8080',
                target: 'http://192.168.0.221:80', // 监控网络


                changeOrigin: true,
                pathRewrite: {
                    '/customer-aim': ''
                }
            }

        }
    },
    configureWebpack: {
        devtool: 'souce-map',
        resolve: {
            alias: {
                '@': path.resolve(__dirname, './src'),
                '@i': path.resolve(__dirname, './src/assets'),
            }
        },
        plugins: [
            new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),

            // 下面是下载的插件的配置
            new CompressionWebpackPlugin({
                algorithm: 'gzip',
                test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
                threshold: 10240,
                minRatio: 0.8
            }),
            new webpack.optimize.LimitChunkCountPlugin({
                maxChunks: 5,
                minChunkSize: 100
            }),
            // new PrerenderSPAPlugin({
            //     // 生成文件的路径，也可以与webpakc打包的一致。
            //     // 下面这句话非常重要！！！
            //     // 这个目录只能有一级，如果目录层次大于一级，在生成的时候不会有任何错误提示，在预渲染的时候只会卡着不动。
            //     staticDir: path.join(__dirname,'dist'),
            //     // 对应自己的路由文件，比如a有参数，就需要写成 /a/param1。
            //     routes: ['/', '/product','/about'],
            //     // 这个很重要，如果没有配置这段，也不会进行预编译
            //     renderer: new Renderer({
            //         inject: {
            //             foo: 'bar'
            //         },
            //         headless: false,
            //         // 在 main.js 中 document.dispatchEvent(new Event('render-event'))，两者的事件名称要对应上。
            //         renderAfterDocumentEvent: 'render-event'
            //     })
            // }),
        ]
    },
    chainWebpack(config) {
        config.plugin("html").tap((args) => {
            args[0].favicon = path.resolve(__dirname, 'public', process.env.VUE_APP_FAVICON);
            return args;
        });
        // config.externals({
        //   'vue': 'Vue',
        //   'vuex': 'Vuex',
        //   'vue-router': 'VueRouter',
        //   // 'axios': 'axios',
        //   'element-ui': 'ELEMENT',
        //   'echarts': 'echarts'
        // })

        // {
        //   test: /\.(png|jpe?g|gif|PDF)$/i,
        //   use: [
        //     {
        //       loader: 'file-loader',
        //     },
        //   ],
        // },

        config.optimization.splitChunks({
            chunks: 'all',
            maxInitialRequests: Infinity,
            minSize: 300000, // 依赖包超过300000bit将被单独打包
            automaticNameDelimiter: '-',
            cacheGroups: {
                vendor: {
                    test: /[\\/]node_modules[\\/]/,
                    name(module) {
                        const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
                        return `chunk.${packageName.replace('@', '')}`;
                    },
                    priority: 10
                }
            }
        })
        config.plugins.delete('prefetch');
    },
    css: {
        extract: process.env.NODE_ENV === 'production' ? {
            ignoreOrder: true,
        } : false,
    }
}